// source --> https://89metra.ru/wp-content/plugins/wp-google-map-gold/assets/js/maps.js?ver=6.0
/**
* This jQuery plugin displays map and it's components.
* @author Flipper Code (hello *at* flippercode *dot* com)
* @version 1.0
*/
(function($, window, document, undefined) {
function Map_Control(options) {
this.options = options;
}
Map_Control.prototype.create_element = function(controlDiv, map, html_element) {
// Set CSS for the control border
var controlUI = document.createElement('div');
controlUI.style.backgroundColor = '#fff';
controlUI.style.border = '2px solid #fff';
controlUI.style.borderRadius = '3px';
controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
controlUI.style.cursor = 'pointer';
controlUI.style.marginBottom = '22px';
controlUI.style.textAlign = 'center';
controlUI.title = 'Click to recenter the map';
controlDiv.appendChild(controlUI);
// Set CSS for the control interior
var controlText = document.createElement('div');
controlText.style.color = 'rgb(25,25,25)';
controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
controlText.style.fontSize = '16px';
controlText.style.lineHeight = '38px';
controlText.style.paddingLeft = '5px';
controlText.style.paddingRight = '5px';
controlText.innerHTML = html_element;
controlUI.appendChild(controlText);
google.maps.event.addDomListener(controlUI, 'click', function() {
map.setCenter(new google.maps.LatLng(41.85, -87.65));
});
};
function overlay_generator(tileSize, options) {
this.tileSize = tileSize;
this.overlay_options = options;
}
overlay_generator.prototype.getTile = function(coord, zoom, ownerDocument) {
var div = ownerDocument.createElement("div");
div.innerHTML = coord;
div.style.width = "200px";
div.style.height = "300px";
div.style.fontSize = this.overlay_options.font_size + "px";
div.style.borderStyle = this.overlay_options.border_style;
div.style.borderWidth = this.overlay_options.border_width + "px";
div.style.borderColor = this.overlay_options.border_color;
return div;
};
function GoogleMaps(element, map_data) {
var options;
this.element = element;
this.map_data = $.extend({}, {}, map_data);
options = this.map_data.map_options;
this.settings = $.extend({
"zoom": "5",
"map_type_id": "ROADMAP",
"scroll_wheel": true,
"map_visual_refresh": false,
"full_screen_control": false,
"full_screen_control_position": "BOTTOM_RIGHT",
"zoom_control": true,
"zoom_control_style": "SMALL",
"zoom_control_position": "TOP_LEFT",
"map_type_control": true,
"map_type_control_style": "HORIZONTAL_BAR",
"map_type_control_position": "RIGHT_TOP",
"scale_control": true,
"street_view_control": true,
"street_view_control_position": "TOP_LEFT",
"overview_map_control": true,
"center_lat": "40.6153983",
"center_lng": "-74.2535216",
"draggable": true
}, {}, options);
this.container = $("div[rel='" + $(this.element).attr("id") + "']");
var suppress_markers = false;
if (typeof this.map_data.map_tabs != 'undefined' && typeof this.map_data.map_tabs.direction_tab != 'undefined') {
suppress_markers = this.map_data.map_tabs.direction_tab.suppress_markers;
}
this.directionsService = new google.maps.DirectionsService();
this.directionsDisplay = new google.maps.DirectionsRenderer({
suppressMarkers: suppress_markers,
});
this.drawingmanager = {};
this.geocoder = new google.maps.Geocoder();
this.places = [];
this.show_places = [];
this.categories = {};
this.tabs = [];
this.all_shapes = [];
this.wpgmp_polylines = [];
this.wpgmp_polygons = [];
this.wpgmp_circles = [];
this.wpgmp_shape_events = [];
this.wpgmp_rectangles = [];
this.per_page_value = 0;
this.current_amenities = [];
this.route_directions = [];
this.search_area = '';
this.markerClusterer = null;
this.init();
}
GoogleMaps.prototype = {
init: function() {
var map_obj = this;
var center = new google.maps.LatLng(map_obj.settings.center_lat, map_obj.settings.center_lng);
map_obj.map = new google.maps.Map(map_obj.element, {
zoom: parseInt(map_obj.settings.zoom),
center: center,
disableDoubleClickZoom: (map_obj.settings.scroll_wheel != 'false'),
scrollwheel: (map_obj.settings.scroll_wheel != 'false'),
zoomControl: (map_obj.settings.zoom_control === true),
fullscreenControl: (map_obj.settings.full_screen_control === true),
fullscreenControlOptions: {
position: eval("google.maps.ControlPosition." + map_obj.settings.full_screen_control_position)
},
zoomControlOptions: {
style: eval("google.maps.ZoomControlStyle." + map_obj.settings.zoom_control_style),
position: eval("google.maps.ControlPosition." + map_obj.settings.zoom_control_position)
},
mapTypeControl: (map_obj.settings.map_type_control == true),
mapTypeControlOptions: {
style: eval("google.maps.MapTypeControlStyle." + map_obj.settings.map_type_control_style),
position: eval("google.maps.ControlPosition." + map_obj.settings.map_type_control_position)
},
scaleControl: (map_obj.settings.scale_control == true),
streetViewControl: (map_obj.settings.street_view_control == true),
streetViewControlOptions: {
position: eval("google.maps.ControlPosition." + map_obj.settings.street_view_control_position)
},
overviewMapControl: (map_obj.settings.overview_map_control == true),
overviewMapControlOptions: {
opened: map_obj.settings.overview_map_control
},
draggable: map_obj.settings.draggable,
mapTypeId: eval("google.maps.MapTypeId." + map_obj.settings.map_type_id),
styles: eval(map_obj.map_data.styles)
});
map_obj.map_loaded();
map_obj.responsive_map();
map_obj.create_markers();
map_obj.display_markers();
if (typeof map_obj.map_data.street_view != 'undefined') {
map_obj.set_streetview(center);
}
if (typeof map_obj.map_data.weather_layer != 'undefined') {
map_obj.set_weather_layer();
}
if (typeof map_obj.map_data.bicyle_layer != 'undefined') {
map_obj.set_bicyle_layer();
}
if (typeof map_obj.map_data.traffic_layer != 'undefined') {
map_obj.set_traffic_layer();
}
if (typeof map_obj.map_data.transit_layer != 'undefined') {
map_obj.set_transit_layer();
}
if (typeof map_obj.map_data.panoramio_layer != 'undefined') {
map_obj.set_panoramic_layer();
}
if (typeof map_obj.map_data.overlay_setting != 'undefined') {
map_obj.set_overlay();
}
if (map_obj.settings.display_45_imagery == '45') {
map_obj.set_45_imagery();
}
if (typeof map_obj.map_data.map_visual_refresh === true) {
map_obj.set_visual_refresh();
}
if (typeof map_obj.map_data.marker_cluster != 'undefined') {
map_obj.set_marker_cluster();
}
if (typeof map_obj.map_data.panning_control != 'undefined') {
map_obj.set_panning_control();
}
if (typeof map_obj.map_data.kml_layer != 'undefined') {
map_obj.set_kml_layer();
}
if (typeof map_obj.map_data.fusion_layer != 'undefined') {
map_obj.set_fusion_layer();
}
if (typeof map_obj.map_data.shapes != 'undefined') {
if (typeof map_obj.map_data.shapes.shape != 'undefined') {
map_obj.opened_info = new google.maps.InfoWindow();
if (typeof map_obj.map_data.shapes.shape.polygons != 'undefined')
map_obj.create_polygon();
if (typeof map_obj.map_data.shapes.shape.polylines != 'undefined')
map_obj.create_polyline();
if (typeof map_obj.map_data.shapes.shape.circles != 'undefined')
map_obj.create_circle();
if (typeof map_obj.map_data.shapes.shape.rectangles != 'undefined')
map_obj.create_rectangle();
}
}
if (typeof map_obj.map_data.routes != 'undefined') {
map_obj.create_routes();
}
if (typeof map_obj.map_data.listing != 'undefined') {
if (typeof map_obj.map_data.listing.default_sorting != 'undefined') {
map_obj.sorting(map_obj.map_data.listing.default_sorting.orderby, map_obj.map_data.listing.default_sorting.inorder);
}
}
if (typeof map_obj.map_data.listing != 'undefined') {
map_obj.display_filters_listing();
$.each(map_obj.map_data.listing.filters, function(key, filter) {
$(map_obj.container).find('select[name="' + filter + '"]').on('change', function() {
map_obj.update_filters();
});
});
$(map_obj.container).find('select[name="map_sorting"]').on('change', function() {
var order_data = $(this).val().split("_");
if (order_data[0] !== '' && order_data[1] !== '') {
map_obj.sorting(order_data[0], order_data[1]);
map_obj.update_places_listing();
}
});
$(map_obj.container).find('select[name="map_radius"]').on('change', function() {
var search_data = $(map_obj.container).find('input[name="wpgmp_search_input"]').val();
if (search_data.length >= 2 && $(this).val() != '') {
map_obj.geocoder.geocode({
"address": search_data
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map_obj.search_area = results[0].geometry.location;
map_obj.update_filters();
}
});
} else {
map_obj.search_area = '';
map_obj.update_filters();
}
});
$(map_obj.container).find('select[name="map_perpage_location_sorting"]').on('change', function() {
map_obj.per_page_value = $(this).val();
map_obj.update_filters();
});
$(map_obj.container).find('input[name="wpgmp_search_input"]').on('keyup', function() {
$(map_obj.container).find('select[name="map_radius"]').val('');
map_obj.search_area = '';
map_obj.update_filters();
});
$(map_obj.container).find(".location_pagination" + map_obj.map_data.map_property.map_id).pagination(map_obj.show_places.length, {
callback: map_obj.display_places_listing,
map_data: map_obj,
items_per_page: map_obj.map_data.listing.pagination.listing_per_page,
prev_text: wpgmp_local.prev,
next_text: wpgmp_local.next
});
$(map_obj.container).find('.wpgmp_locations').responsiveEqualHeightGrid();
}
$('.wpgmp-shape-delete').click(function() {
map_obj.deleteSelectedShape();
$('.hiderow').hide();
});
$('select[name="shape_stroke_opacity"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('select[name="shape_stroke_weight"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('select[name="shape_stroke_color"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('select[name="shape_fill_opacity"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('select[name="shape_fill_color"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('input[name="shape_click_url"]').change(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$('textarea[name="shape_click_message"]').blur(function() {
map_obj.set_shapes_options(map_obj.selectedShape);
});
$("textarea[name='shape_path']").blur(function() {
var cordinates = $(this).val().split(' ');
if (cordinates.length == 1) {
cordinates = $(this).val().split("\n");
}
var path = [];
$.each(cordinates, function(ind, cordinate) {
var latlng = cordinate.split(',');
path.push(new google.maps.LatLng(latlng[0], latlng[1]));
});
map_obj.selectedShape.setPath(path);
});
$("input[name='shape_radius']").blur(function() {
var radius = parseFloat($(this).val());
map_obj.selectedShape.setRadius(radius);
});
$("input[name='shape_center']").blur(function() {
var latlng = $(this).val().split(',');
map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
});
$("input[name='shape_northeast']").blur(function() {
var ea = $(this).val().split(',');
var sw = $("input[name='shape_southwest']").val().split(',');
map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
});
$("input[name='shape_southwest']").blur(function() {
var sw = $(this).val().split(',');
var ea = $("input[name='shape_northeast']").val().split(',');
map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
});
$("input[name='shape_center']").blur(function() {
var latlng = $(this).val().split(',');
map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
});
$('input[name="wpgmp_save_drawing"]').click(function() {
var all_shapes_cordinate = [];
all_shapes_cordinate.push('polylines=' + map_obj.wpgmp_save_polylines().join('::'));
all_shapes_cordinate.push('polygons=' + map_obj.wpgmp_save_polygons().join('::'));
all_shapes_cordinate.push('circles=' + map_obj.wpgmp_save_circles().join('::'));
all_shapes_cordinate.push('rectangles=' + map_obj.wpgmp_save_rectangles().join('::'));
map_obj.wpgmp_save_shapes(all_shapes_cordinate);
});
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
$('.wpgmp-overview .color').wpColorPicker({
change: function(event, ui) {
map_obj.set_shapes_options(map_obj.selectedShape);
}
});
}
}
if (typeof map_obj.map_data.map_tabs != 'undefined') {
this.map_widgets();
$(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").css("display", "none");
if (map_obj.settings.infowindow_filter_only === false) {
$(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", true);
$(map_obj.element).find(".wpgmp_specific_location_item").attr("checked", true);
}
if (this.map_data.map_tabs.category_tab.select_all === true) {
$(map_obj.element).find('input[name="wpgmp_select_all"]').click(function() {
if ($(this).is(":checked")) {
$(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", true);
} else {
$(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", false);
}
map_obj.update_filters();
});
}
$(map_obj.element).find(".wpgmp_toggle_container").click(function() {
$(map_obj.element).find(".wpgmp_toggle_main_container").slideToggle("slow");
if ($(this).text() == wpgmp_local.hide) {
$(this).text(wpgmp_local.show);
} else {
$(this).text(wpgmp_local.hide);
}
});
if (map_obj.map_data.map_tabs.hide_tabs_default === true) {
$(map_obj.element).find(".wpgmp_toggle_container").trigger('click');
}
$(map_obj.element).find(".wpgmp_specific_route_item").attr("checked", true);
$(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").first().css("display", "block");
$(map_obj.element).on('click', "li[class^='wpgmp-tab-'] a", function() {
$(map_obj.element).find("li[class^='wpgmp-tab-'] a").removeClass('active');
$(this).addClass('active');
$(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").css("display", "none");
$(map_obj.element).find(".wpgmp_toggle_main_container").find("#wpgmp_tab_" + $(this).parent().attr('rel')).css("display", "block");
});
$(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_category_item", function() {
//uncheck all locations
if ($(this).is(":checked") === false)
$(this).parent().find('.wpgmp_specific_location_item').attr('checked', false);
else
$(this).parent().find('.wpgmp_specific_location_item').attr('checked', true);
map_obj.update_filters();
});
$(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_route_item", function() {
//uncheck all locations
var selected_route = map_obj.route_directions[$(this).val()];
if ($(this).is(":checked") === false) {
selected_route.setMap(null);
} else {
selected_route.setMap(map_obj.map);
}
});
$(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_location_item", function() {
map_obj.update_filters();
});
//directions tabs
if (this.map_data.map_tabs.direction_tab.dir_tab === true) {
$(this.element).find(".wpgmp_find_direction").click(function() {
var start = $(map_obj.element).find('.start_point');
var end = $(map_obj.element).find('.end_point');
var travel_mode = $(map_obj.element).find('select[name="travel_mode"]').val();
var travel_unit = $(map_obj.element).find('select[name="travel_unit"]').val();
var direction_panel = $(map_obj.element).find('.directions-panel');
var current_address = '';
if ($(start).val() === "") {
$(start).focus();
return false;
}
if ($(end).val() === "") {
$(end).focus();
return false;
}
var options = {
"start": start.val(),
"end": end.val(),
"mode": travel_mode,
"unit": travel_unit,
"direction_panel": direction_panel[0],
"map": map_obj.map
};
console.log(options);
map_obj.find_direction(options);
});
}
$(this.element).find(".wpgmp_find_nearby_button").click(function() {
var target = $(this).parent().parent();
var lat = $(target).find(".wpgmp_auto_suggest").data('latitude');
var lon = $(target).find(".wpgmp_auto_suggest").data('longitude');
var radius = $(map_obj.element).find("input[name='wpgmp_radius']").val();
var dim = $(map_obj.element).find("select[name='wpgmp_route_dimension']").val();
var amenities = $(map_obj.element).find('input[name^="wpgmp_place_types"]:checked');
var divide_by = 1.60934;
var service;
if (dim == 'miles') {
divide_by = 1.60934;
} else {
divide_by = 1;
}
var circle_radius_meters = parseInt(radius) * divide_by * 1000;
// Now draw a circle.
if (amenities.length > 0) {
//remove all previous amenities
if (map_obj.current_amenities.length > 0) {
$.each(map_obj.current_amenities, function(am, amenity) {
amenity.marker.setMap(null);
});
}
map_obj.amenity_infowindow = new google.maps.InfoWindow();
var place_types = [];
$.each(amenities, function(index, amenity) {
place_types.push($(amenity).val());
});
var request = {
location: new google.maps.LatLng(lat, lon),
radius: circle_radius_meters,
types: place_types
};
service = new google.maps.places.PlacesService(map_obj.map);
service.nearbySearch(request, function(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
map_obj.createMarker(results[i]);
}
}
});
}
map_obj.map.setCenter(new google.maps.LatLng(lat, lon));
if (map_obj.map_data.map_tabs.nearby_tab.show_nearby_circle === true) {
if (typeof map_obj.set_nearbycenter_circle != 'undefined') {
map_obj.set_nearbycenter_circle.setMap(null);
}
//this.map_data.map_tabs.nearby_tab.near_tab
//
map_obj.set_nearbycenter_circle = new google.maps.Circle({
map: map_obj.map,
fillColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillcolor,
fillOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillopacity,
strokeColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokecolor,
strokeOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeopacity,
strokeWeight: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeweight,
center: new google.maps.LatLng(lat, lon),
radius: circle_radius_meters,
});
map_obj.map.setZoom(parseInt(map_obj.map_data.map_tabs.nearby_tab.nearby_circle_zoom));
}
}),
$(this.element).find(".wpgmp_mcurrent_loction").click(function() {
var this_current = this;
map_obj.get_current_location(function(user_location) {
$(this_current).parent().find('.wpgmp_auto_suggest').data('latitude', user_location.lat());
$(this_current).parent().find('.wpgmp_auto_suggest').data('longitude', user_location.lng());
map_obj.geocoder.geocode({
"latLng": user_location
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
current_address = results[0]["formatted_address"];
$(this_current).parent().find('.wpgmp_auto_suggest').val(current_address);
} else
console.log(status);
});
}, function() {
console.log("" + wpgmp_local.wpgmp_not_working + "");
});
});
} //tabs ended
if (typeof map_obj.map_data.geojson != 'undefined') {
map_obj.load_json(map_obj.map_data.geojson);
}
$("body").on("click", ".wpgmp_marker_link", function() {
map_obj.open_infowindow($(this).data("marker"));
$('html, body').animate({
scrollTop: $(map_obj.container).offset().top - 150
}, 500);
});
$(map_obj.container).on("click", ".wpgmp_listing_container .place_title", function() {
map_obj.open_infowindow($(this).data("marker"));
$('html, body').animate({
scrollTop: $(map_obj.container).offset().top - 150
}, 500);
});
$(map_obj.container).on("click", ".wpgmp_tab_item .place_title", function() {
map_obj.open_infowindow($(this).data("marker"));
});
// REGISTER AUTO SUGGEST
map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
if (map_obj.settings.show_center_circle === true) {
map_obj.show_center_circle();
}
if (map_obj.settings.show_center_marker === true) {
map_obj.show_center_marker();
}
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true)
this.enable_drawing();
}
},
load_json: function(url) {
this.map.data.loadGeoJson(url);
},
createMarker: function(place) {
var map_obj = this;
var map = map_obj.map;
var placeLoc = place.geometry.location;
var image = {
url: place.icon,
size: new google.maps.Size(25, 25),
scaledSize: new google.maps.Size(25, 25)
};
place.marker = new google.maps.Marker({
map: map,
position: place.geometry.location,
icon: image
});
google.maps.event.addListener(place.marker, 'click', function() {
map_obj.amenity_infowindow.setContent(place.name);
map_obj.amenity_infowindow.open(map, this);
});
map_obj.current_amenities.push(place);
},
wpgmp_image_type_overlays: function() {
var map_obj = this;
var imageMapType = new google.maps.ImageMapType({
getTileUrl: function(coord, zoom) {
return ['http://www.gstatic.com/io2010maps/tiles/5/L2_',
zoom, '_', coord.x, '_', coord.y, '.png'
].join('');
},
tileSize: new google.maps.Size(256, 256)
});
map_obj.map.overlayMapTypes.push(imageMapType);
},
wpgmp_within_radius: function(place, search_area) {
var map_obj = this;
var radius = $(map_obj.container).find('select[name="map_radius"]').val();
var dimension = map_obj.map_data.listing.radius_dimension;
if (dimension == 'km') {
radius = parseInt(radius) * 1000;
} else {
radius = parseInt(radius) * 1609.34;
}
if (google.maps.geometry.spherical.computeDistanceBetween(place.marker.getPosition(), search_area) < radius) {
return true;
} else {
return false;
}
},
wpgmp_get_nearby_locations: function(lat1, lon1, radius) {
var current_rd = 'miles';
var map_obj = this;
var radius_km = 6371;
if (current_rd == "miles") {
max_radius_km = radius * 1.61;
} else if (current_rd == "km") {
max_radius_km = radius;
}
var distances = [];
var closest = -1;
var pi = Math.PI;
var marker_info = {};
$.each(map_obj.places, function(index, place) {
var lat2 = place.location.lat;
var lon2 = place.location.lng;
var chLat = lat2 - lat1;
var chLon = lon2 - lon1;
var dLat = chLat * (pi / 180);
var dLon = chLon * (pi / 180);
var rLat1 = lat1 * (pi / 180);
var rLat2 = lat2 * (pi / 180);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(rLat1) * Math.cos(rLat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = radius_km * c;
if (max_radius_km !== 0) {
if (d <= max_radius_km) {
distances[d] = place;
distances.sort(function(a, b) {
return a - b;
});
marker_info["marker" + place.id] = d;
}
} else {
distances[d] = markers[i];
distances.sort(function(a, b) {
return a - b;
});
marker_info["marker" + place.id] = d;
}
});
sortest_markers = map_obj.wpgmp_sort_distance(marker_info);
return sortest_markers;
},
wpgmp_sort_distance: function(obj) {
var arr = [];
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
arr.push({
"key": prop,
"value": obj[prop]
});
}
}
arr.sort(function(a, b) {
return a.value - b.value;
});
return arr;
},
get_user_position: function(SuccessCallback, ErrorCallback) {
var map_obj = this;
if (!map_obj.user_lat_lng) {
navigator.geolocation.getCurrentPosition(function(position) {
map_obj.user_lat_lng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
if (SuccessCallback)
SuccessCallback(map_obj.user_lat_lng);
}, function(ErrorPosition) {
if (ErrorCallback)
ErrorCallback(ErrorPosition);
}, {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
});
} else {
if (SuccessCallback)
SuccessCallback(map_obj.user_lat_lng);
}
},
marker_bind: function(marker) {
map_obj = this;
google.maps.event.addListener(marker, 'drag', function() {
var position = marker.getPosition();
map_obj.geocoder.geocode({
latLng: position
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
$("#googlemap_address").val(results[0].formatted_address);
$(".google_city").val(map_obj.wpgmp_finddata(results[0], 'administrative_area_level_3') || map_obj.wpgmp_finddata(results[0], 'locality'));
$(".google_state").val(map_obj.wpgmp_finddata(results[0], "administrative_area_level_1"));
$(".google_country").val(map_obj.wpgmp_finddata(results[0], "country"));
if (results[0].address_components) {
for (var i = 0; i < results[0].address_components.length; i++) {
for (var j = 0; j < results[0].address_components[i].types.length; j++) {
if (results[0].address_components[i].types[j] == "postal_code") {
wpgmp_zip_code = results[0].address_components[i].long_name;
$(".google_postal_code").val(wpgmp_zip_code);
}
}
}
}
}
});
$(".google_latitude").val(position.lat());
$(".google_longitude").val(position.lng());
});
},
google_auto_suggest: function(obj) {
var map_obj = this;
obj.each(function() {
var current_input = this;
var autocomplete = new google.maps.places.Autocomplete(this);
autocomplete.bindTo('bounds', map_obj.map);
if ($(this).attr("name") == 'location_address') {
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map_obj.map,
draggable: true,
anchorPoint: new google.maps.Point(0, -29)
});
map_obj.marker_bind(marker);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
// If the place has a geometry, then present it on a map.
if (place.geometry.viewport) {
map_obj.map.fitBounds(place.geometry.viewport);
} else {
map_obj.map.setCenter(place.geometry.location);
map_obj.map.setZoom(17);
}
$(".google_latitude").val(place.geometry.location.lat());
$(".google_longitude").val(place.geometry.location.lng());
$(".google_city").val(map_obj.wpgmp_finddata(place, 'administrative_area_level_3') || map_obj.wpgmp_finddata(place, 'locality'));
$(".google_state").val(map_obj.wpgmp_finddata(place, "administrative_area_level_1"));
$(".google_country").val(map_obj.wpgmp_finddata(place, "country"));
if (place.address_components) {
for (var i = 0; i < place.address_components.length; i++) {
for (var j = 0; j < place.address_components[i].types.length; j++) {
if (place.address_components[i].types[j] == "postal_code") {
wpgmp_zip_code = place.address_components[i].long_name;
$(".google_postal_code").val(wpgmp_zip_code);
}
}
}
}
marker.setPosition(place.geometry.location);
marker.setVisible(true);
});
} else {
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
$().val(place.geometry.location.lat());
$(current_input).data('longitude', place.geometry.location.lng());
$(current_input).data('latitude', place.geometry.location.lat());
});
}
});
},
wpgmp_finddata: function(result, type) {
var component_name = "";
for (i = 0; i < result.address_components.length; ++i) {
var component = result.address_components[i];
$.each(component.types, function(index, value) {
if (value == type) {
component_name = component.long_name;
}
});
}
return component_name;
},
clearSelection: function() {
var map_obj = this;
if (map_obj.selectedShape) {
map_obj.selectedShape.setEditable(false);
map_obj.selectedShape = null;
}
},
setSelection: function(shape) {
var map_obj = this;
map_obj.clearSelection();
map_obj.selectedShape = shape;
map_obj.selectedShape.setEditable(true);
},
deleteSelectedShape: function() {
var map_obj = this;
var key;
if (map_obj.selectedShape) {
for (key in map_obj.wpgmp_circles) {
if (map_obj.wpgmp_circles[key] == map_obj.selectedShape) {
map_obj.wpgmp_circles.splice(key, 1);
}
}
for (key in map_obj.wpgmp_rectangles) {
if (map_obj.wpgmp_rectangles[key] == map_obj.selectedShape) {
map_obj.wpgmp_rectangles.splice(key, 1);
}
}
for (key in map_obj.wpgmp_polygons) {
if (map_obj.wpgmp_polygons[key] == map_obj.selectedShape) {
map_obj.wpgmp_polygons.splice(key, 1);
}
}
for (key in map_obj.wpgmp_polylines) {
if (map_obj.wpgmp_polylines[key] == map_obj.selectedShape) {
map_obj.wpgmp_polylines.splice(key, 1);
}
}
map_obj.selectedShape.setMap(null);
}
},
add_tab: function(title, content) {
var tab = [];
tab.title = title;
tab.content = content;
this.tabs.push(tab);
},
show_tabs: function() {
if (this.tabs.length === 0)
return;
var content = '
';
content += '
';
$.each(this.tabs, function(index, tab) {
content += '
';
content += tab.content;
content += '
';
});
content += '
' + wpgmp_local.hide + '
';
return content;
},
map_widgets: function() {
var content = '';
if (this.map_data.map_tabs.category_tab.cat_tab === true)
this.widget_category();
if (this.map_data.map_tabs.direction_tab.dir_tab === true)
this.widget_directions();
if (this.map_data.map_tabs.nearby_tab.near_tab === true)
this.widget_nearby();
if (this.map_data.map_tabs.route_tab.display_route_tab === true)
this.widget_route_tab();
if (typeof this.map_data.map_tabs.extension_tabs != 'undefined') {
this.widget_extensions_tab();
}
content += this.show_tabs();
$(this.element).append(content); //todo
},
widget_extensions_tab: function() {
var map_obj = this;
var new_tabs = map_obj.map_data.map_tabs.extension_tabs;
if (typeof new_tabs != 'undefined' && new_tabs.length > 0) {
$.each(new_tabs, function(index, tab) {
map_obj.add_tab(tab.title, tab.content);
});
}
},
widget_route_tab: function() {
var route_data = this.map_data.map_tabs.route_tab.route_tab_data;
var content = '';
if (this.map_data.map_tabs.route_tab.display_route_tab_data === true) {
content += '';
if (route_data) {
$.each(route_data, function(index, route) {
content += '
';
});
}
content += '
';
}
this.add_tab(this.map_data.map_tabs.route_tab.route_tab_title, content);
},
widget_nearby: function() {
var content = '';
this.add_tab(this.map_data.map_tabs.nearby_tab.nearby_tab_title, content);
},
widget_directions: function() {
var content = '';
content = '';
if (this.map_data.map_tabs.route_start_location == "textbox") {
content += '
';
} else if (this.map_data.map_tabs.route_start_location == "selectbox") {
content += '
';
}
if (this.map_data.map_tabs.route_end_location == "textbox") {
content += '
';
} else if (this.map_data.map_tabs.route_end_location == "selectbox") {
content += '
';
}
content += '
';
content += '
';
this.add_tab(this.map_data.map_tabs.direction_tab.direction_tab_title, content);
},
widget_category: function() {
var map_obj = this;
if (map_obj.map_data.map_tabs.category_tab.select_all === true) {
var content = '  ' + wpgmp_local.select_all + '
';
} else {
var content = '';
}
var categories_tab_data = {};
if (typeof map_obj.map_data.places != 'undefined') {
$.each(map_obj.map_data.places, function(index, place) {
if (typeof place.categories != 'undefined') {
$.each(place.categories, function(index, categories) {
if (typeof categories.type != "undefined" && categories.type == 'category' && categories.name) {
if (typeof categories_tab_data[categories.id] == "undefined") {
categories_tab_data[categories.id] = {};
categories_tab_data[categories.id]['data'] = [];
}
categories_tab_data[categories.id]['cat_id'] = categories.id;
categories_tab_data[categories.id]['cat_title'] = categories.name;
categories_tab_data[categories.id]['cat_marker_icon'] = categories.icon;
var redirect_permalink = "";
if (place.location.redirect_permalink)
redirect_permalink = place.location.redirect_permalink;
var redirect_custom_link = "";
if (place.location.redirect_custom_link)
redirect_custom_link = place.location.redirect_custom_link;
categories_tab_data[categories.id]['data'].push({
"cat_location_id": place.id,
"cat_location_title": place.title,
"cat_location_address": place.address,
"cat_location_zoom": place.location.zoom,
"onclick_action": place.location.onclick_action,
"redirect_permalink": redirect_permalink,
"redirect_custom_link": redirect_custom_link,
});
}
});
}
});
}
var category_orders = [];
if (typeof categories_tab_data != 'undefined') {
$.each(categories_tab_data, function(index, categories) {
if (map_obj.map_data.map_tabs.category_tab.cat_order_by == 'count') {
category_orders.push(categories.data.length);
} else {
category_orders.push(categories.cat_title);
}
});
}
category_orders.sort();
var ordered_categories = [];
$.each(category_orders, function(index, cat_title) {
$.each(categories_tab_data, function(index, categories) {
var compare_with;
if (map_obj.map_data.map_tabs.category_tab.cat_order_by == 'count') {
compare_with = categories.data.length;
} else {
compare_with = categories.cat_title;
}
if (cat_title == compare_with) {
ordered_categories.push(categories);
}
});
});
if (typeof ordered_categories != 'undefined') {
$.each(ordered_categories, function(index, categories) {
var category_image = '';
if (typeof categories.cat_marker_icon != 'undefined') {
category_image = '';
}
content += '';
content += '
';
if (map_obj.map_data.map_tabs.category_tab.show_count === true) {
location_count = " (" + categories.data.length + ")";
} else {
location_count = "";
}
content += '
' + categories.cat_title + location_count + category_image + '';
if (map_obj.map_data.map_tabs.category_tab.hide_location !== true) {
content += '
';
}
content += '
';
});
}
map_obj.add_tab(map_obj.map_data.map_tabs.category_tab.cat_tab_title, content);
},
sorting: function(order_by, in_order) {
switch (order_by) {
case 'category':
this.places.sort(this.sortByCategory);
this.show_places.sort(this.sortByCategory);
if (in_order == 'desc') {
this.places.reverse();
this.show_places.reverse();
}
break;
case 'title':
this.map_data.places.sort(this.sortByTitle);
this.show_places.sort(this.sortByTitle);
if (in_order == 'desc') {
this.places.reverse();
this.show_places.reverse();
}
break;
case 'address':
this.map_data.places.sort(this.sortByAddress);
this.show_places.sort(this.sortByAddress);
if (in_order == 'desc') {
this.places.reverse();
this.show_places.reverse();
}
break;
}
},
sortByCategory: function(a, b) {
if (b.categories[0] && a.categories[0]) {
if (a.categories[0].name && b.categories[0].name) {
var a_val = a.categories[0].name.toLowerCase();
var b_val = b.categories[0].name.toLowerCase();
return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
}
}
},
sortByTitle: function(a, b) {
var a_val = a.title.toLowerCase();
var b_val = b.title.toLowerCase();
return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
},
sortByAddress: function(a, b) {
var a_val = a.address.toLowerCase();
var b_val = b.address.toLowerCase();
return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
},
update_filters: function() {
var filters;
if (typeof this.map_data.listing != 'undefined') {
filters = $.map(this.map_data.listing.filters, function(filter, i) {
var val = $('select[name="' + filter + '"]');
return {
name: val.attr('name'),
val: val.val()
};
});
}
this.apply_filters(filters);
},
apply_filters: function(filters) {
var map_obj = this;
var showAll = true;
var show = true;
map_obj.show_places = [];
if (typeof map_obj.map_data.places != 'undefined') {
$.each(map_obj.map_data.places, function(place_key, place) {
show = true;
enable_search_term = false;
if (typeof map_obj.map_data.listing != 'undefined') {
if (map_obj.map_data.listing.display_search_form === true) {
search_term = $(map_obj.map_data.listing.listing_container + ' input[name="wpgmp_search_input"]').val();
search_term = search_term.toLowerCase();
if (search_term.length > 0) {
enable_search_term = true;
}
}
}
if (typeof filters != 'undefined') {
$.each(filters, function(filter_key, filter) {
var in_category = false;
if (filter.val) {
if (typeof place.categories != 'undefined') {
$.each(place.categories, function(cat_index, category) {
if (category.id == filter.val)
in_category = true;
});
}
if (in_category === false)
show = false;
} else {
filter.val = "";
}
if (enable_search_term === true && show === true) {
in_category = false;
if (typeof place.categories != 'undefined') {
$.each(place.categories, function(cat_index, category) {
if (category.name && category.name.indexOf(search_term) >= 0)
in_category = true;
});
}
if (place.title.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.content.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.lat.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.lng.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.address && place.address.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.state && place.location.state.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.country && place.location.country.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.postal_code && place.location.postal_code.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (place.location.city && place.location.city.toLowerCase().indexOf(search_term) >= 0) {
show = true;
} else if (typeof map_obj.search_area != 'undefined' && map_obj.search_area != '' && map_obj.wpgmp_within_radius(place, map_obj.search_area) === true) {
show = true;
} else {
show = false;
}
}
});
}
// if checked category
if (typeof map_obj.map_data.map_tabs != 'undefined') {
if (map_obj.map_data.map_tabs.category_tab.cat_tab === true && show != false) {
var all_selected_category = $('.wpgmp_specific_category_item:checked');
var in_checked_category = false;
if (all_selected_category.length === 0) {
// means no any category selected so show those location without categories.
if (typeof place.categories != 'undefined') {
$.each(place.categories, function(cat_index, category) {
if (category.id === '')
in_checked_category = true;
});
}
}
$.each(all_selected_category, function(index, selected_category) {
var all_not_selected_location = $(selected_category).parent().find('.wpgmp_specific_location_item:not(:checked)');
if (typeof place.categories != 'undefined') {
$.each(place.categories, function(cat_index, category) {
if (category.id === '')
in_checked_category = true;
else if (category.id == $(selected_category).val()) {
in_checked_category = true;
place.marker.setIcon(category.icon);
}
});
}
//Hide unchecked locations.
if (all_not_selected_location.length !== 0) {
$.each(all_not_selected_location, function(index_loc, not_selected_location) {
if (place.id == $(not_selected_location).val()) {
in_checked_category = false;
}
});
}
});
if (in_checked_category === false)
show = false;
else
show = true;
}
}
place.marker.visible = show;
place.marker.setVisible(show);
place.infowindow.close();
place.marker.setAnimation(null);
if (show === true)
map_obj.show_places.push(place);
});
}
if (typeof map_obj.map_data.listing != 'undefined')
map_obj.update_places_listing();
if (typeof map_obj.map_data.marker_cluster != 'undefined') {
map_obj.set_marker_cluster();
}
},
create_perpage_option: function() {
var map_obj = this;
var options = '';
var content = '';
content += '';
return content;
},
create_sorting: function() {
var options = '';
var content = '';
if (this.map_data.listing.display_sorting_filter === true) {
content += '';
}
return content;
},
create_radius: function() {
var options = '';
var content = '';
if (this.map_data.listing.display_radius_filter === true) {
content += '';
}
return content;
},
create_filters: function() {
var options = '';
var filters = {};
var places = this.map_data.places;
var wpgmp_listing_filter = this.map_data.listing;
var wpgmp_alltfilter = wpgmp_listing_filter.display_taxonomies_all_filter;
$.each(places, function(index, place) {
if (typeof place.categories == 'undefined') {
place.categories = {};
}
$.each(place.categories, function(cat_index, category) {
if (typeof filters[category.type] == 'undefined') {
filters[category.type] = {};
}
if (category.name) {
filters[category.type][category.name] = category.id;
}
});
});
// now create select boxes
var content = '';
$.each(filters, function(index, options) {
if (wpgmp_listing_filter.display_category_filter === true && index == "category") {
content += '';
} else if (wpgmp_listing_filter.display_taxonomies_filter === true) {
if (wpgmp_alltfilter === null)
return false;
if (wpgmp_alltfilter.indexOf(index) > -1) {
content += '';
}
}
});
return content;
},
update_places_listing: function() {
var map_obj = this;
if (map_obj.per_page_value > 0)
map_obj.per_page_value = map_obj.per_page_value;
else
map_obj.per_page_value = map_obj.map_data.listing.pagination.listing_per_page;
$(map_obj.container).find(".location_pagination" + map_obj.map_data.map_property.map_id).pagination(map_obj.show_places.length, {
callback: map_obj.display_places_listing,
map_data: map_obj,
items_per_page: map_obj.per_page_value,
prev_text: wpgmp_local.prev,
next_text: wpgmp_local.next
});
},
display_filters_listing: function() {
var wpgmpgl = this.map_data.listing.list_grid;
var content = '';
content += this.display_filters();
content += "
";
content += "
";
$(this.map_data.listing.listing_container).html(content);
},
display_filters: function() {
var content = '';
content += '' + this.map_data.listing.listing_header + '
';
if (this.map_data.listing.display_search_form === true) {
content += '';
}
content += '' + this.create_filters() + this.create_sorting() + '';
if (this.map_data.listing.display_location_per_page_filter === true) {
content += ' ' + this.create_perpage_option() + ' ';
}
content += ' ' + this.create_radius() + ' ';
if (this.map_data.listing.display_print_option === true) {
content += ' ' + wpgmp_local.img_print;
}
if (this.map_data.listing.display_grid_option === true) {
content += ' ' + wpgmp_local.img_grid + wpgmp_local.img_list;
}
content += '
';
return content;
},
find_direction: function(options) {
var map_obj = this;
var request = {
origin: options.start,
destination: options.end,
optimizeWaypoints: true,
travelMode: eval("google.maps.TravelMode." + options.mode),
unitSystem: eval("google.maps.UnitSystem." + options.unit)
};
console.log(request);
map_obj.directionsService = new google.maps.DirectionsService();
map_obj.directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
map_obj.directionsDisplay.setMap(map_obj.map);
map_obj.directionsDisplay.setDirections(response);
if (false == map_obj.map_data.map_tabs.direction_tab.suppress_markers) {
map_obj.directionsDisplay.setPanel(options.direction_panel);
$(options.direction_panel).css('display', 'block');
}
}
});
},
display_places_listing: function(page_index, jq) {
var content = '';
var map_obj = this;
var items_per_page = 10;
if (map_obj.items_per_page)
items_per_page = map_obj.items_per_page;
else
items_per_page = map_obj.map_data.map_data.listing.pagination.listing_per_page;
var data_source = map_obj.map_data.show_places;
var listing_container = map_obj.map_data.map_data.listing.listing_container;
var listing_placeholder = map_obj.map_data.map_data.listing.listing_placeholder;
var max_elem = Math.min((page_index + 1) * items_per_page, data_source.length);
var link = '';
if (max_elem > 0) {
for (var i = page_index * items_per_page; i < max_elem; i++) {
var place = data_source[i];
var temp_listing_placeholder = listing_placeholder;
if (place.marker.visible === true) {
if (place.id) {
if (place.location.onclick_action == "marker") {
link = '' + place.title + '';
} else if (place.location.onclick_action == "post") {
link = '' + place.title + '';
} else if (place.location.onclick_action == "custom_link") {
link = '' + place.title + '';
}
}
var image = [];
var category_name = [];
var wpgmp_arr = {};
if (place.categories) {
for (c = 0; c < place.categories.length; c++) {
if (place.categories[c].icon !== '') {
image.push("");
}
if (place.categories[c].type == 'category' && place.categories[c].name != '') {
category_name.push(place.categories[c].name);
}
if (place.categories[c].type != 'category') {
if (typeof place.categories[c].name == "undefined")
continue;
if (place.categories[c].name)
var sep = ',';
if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
wpgmp_arr[place.categories[c].type] = '';
wpgmp_arr[place.categories[c].type] += place.categories[c].name + sep;
}
}
}
var replaceData = {
"{marker_id}": place.id,
"{marker_title}": link,
"{marker_address}": place.address,
"{marker_latitude}": place.location.lat,
"{marker_longitude}": place.location.lng,
"{marker_city}": place.location.city,
"{marker_state}": place.location.state,
"{marker_country}": place.location.country,
"{marker_postal_code}": place.location.postal_code,
"{marker_zoom}": place.location.zoom,
"{marker_icon}": image,
"{marker_category}": category_name.join(","),
"{marker_message}": place.content,
"{wpgmp_listing_html}": place.listing_hook
};
//Add extenstion fields of locations
if (typeof place.location.extension_fields != 'undefined') {
for (var extra in place.location.extension_fields) {
if (!place.location.extension_fields[extra]) {
replaceData['{' + extra + '}'] = '';
} else {
replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
}
}
}
//Add extra fields of locations
if (typeof place.location.extra_fields != 'undefined') {
for (var extra in place.location.extra_fields) {
if (!place.location.extra_fields[extra]) {
replaceData['{' + extra + '}'] = '';
} else {
replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
}
}
}
if (wpgmp_arr) {
for (var n in wpgmp_arr) {
replaceData["{" + n + "}"] = wpgmp_remove_last_comma(wpgmp_arr[n]);
}
}
function wpgmp_remove_last_comma(strng) {
var n = strng.lastIndexOf(",");
var a = strng.substring(0, n)
return a;
}
temp_listing_placeholder = temp_listing_placeholder.replace(/{[^{}]+}/g, function(match) {
if (match in replaceData) {
return (replaceData[match]);
} else {
return ("");
}
});
content += temp_listing_placeholder;
}
}
} else {
content = "" + wpgmp_local.wpgmp_location_no_results + "
";
}
content += '';
$(listing_container).find(".wpgmp_categories").html(content);
$(listing_container).find('.wpgmp_locations').responsiveEqualHeightGrid();
return false;
},
open_infowindow: function(current_place) {
var map_obj = this;
$.each(this.map_data.places, function(key, place) {
if (parseInt(place.id) == parseInt(current_place) && place.marker.visible === true) {
place.marker.setMap(map_obj.map);
if (typeof map_obj.map_data.marker_cluster != 'undefined') {
map_obj.map.setZoom(parseInt(map_obj.map_data.marker_cluster.marker_zoom_level));
}
place.infowindow.open(map_obj.map, place.marker);
if (typeof map_obj.settings.infowindow_click_change_center != 'undefined' && map_obj.settings.infowindow_click_change_center == true) {
map_obj.map.setCenter(place.marker.getPosition());
}
if (typeof map_obj.settings.infowindow_click_change_zoom != 'undefined' && map_obj.settings.infowindow_click_change_zoom > 0) {
map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
}
var bounce_on_event = map_obj.settings.infowindow_bounce_animation;
if (bounce_on_event == 'click') {
map_obj.toggle_bounce(place.marker);
}
} else {
place.infowindow.close();
place.marker.setAnimation(null);
}
});
},
place_info: function(place_id) {
var place_obj;
$.each(this.places, function(index, place) {
if (parseInt(place.id) == parseInt(place_id)) {
place_obj = place;
}
});
return place_obj;
},
create_routes: function() {
var map_obj = this;
if (this.map_data.routes) {
$.each(this.map_data.routes, function(index, routeobj) {
var directionsService = new google.maps.DirectionsService();
var route_polyline = {
strokeColor: routeobj.route_stroke_color,
strokeOpacity: routeobj.route_stroke_opacity,
strokeWeight: routeobj.route_stroke_weight,
clickable: false
};
var renderer_options = {
draggable: routeobj.route_marker_draggable,
suppressMarkers: true,
suppressInfoWindows: true,
preserveViewport: true,
polylineOptions: route_polyline,
};
var start = routeobj.start_location_data;
var end = routeobj.end_location_data;
var waypts = [];
if (typeof routeobj.way_points != 'undefined') {
$.each(routeobj.way_points, function(point_index, place) {
waypts.push({
location: place,
stopover: true
});
});
}
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: routeobj.route_optimize_waypoints,
travelMode: eval("google.maps.TravelMode." + routeobj.route_travel_mode),
unitSystem: eval("google.maps.UnitSystem." + routeobj.route_unit_system),
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay = new google.maps.DirectionsRenderer(renderer_options);
directionsDisplay.setMap(map_obj.map);
directionsDisplay.setDirections(response);
directionsDisplay.setPanel($(".directions-panel-route" + routeobj.route_id + "").get(0));
if (typeof routeobj.route_id != 'undefined') {
/*
if (typeof routeobj.route_direction_panel != 'undefined') {
if (routeobj.route_direction_panel == true) {
var dirpanel = $(".wpgmp_direction_panel_route" + routeobj.route_id + "").get(0);
dirpanel.innerHTML = "";
$.each(response.routes, function(key, value) {
$.each(value.legs, function(key1, dir) {
var output = '';
output += '' + dir.start_address + '
';
output += '' + dir.distance.text + ' - about ' + dir.duration.text + '
';
output += '';
for (i = 0; i < dir.steps.length; i++) {
output += '';
output += ' | ';
output += '' + (i + 1) + '. | ';
output += '' + dir.steps[i].instructions + ' | ';
output += '' + dir.steps[i].distance.text + ' | ';
output += '
';
}
output += '
';
output += '' + dir.end_address + '
';
dirpanel.innerHTML += output;
});
});
}
}
*/
map_obj.route_directions[routeobj.route_id] = directionsDisplay;
}
} else {
console.log(routeobj);
console.log("" + wpgmp_local.wpgmp_route_not_avilable + "");
}
});
});
}
},
enable_drawing: function() {
var map_obj = this;
map_obj.drawingmanager = new google.maps.drawing.DrawingManager({
drawingMode: null,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE
]
},
circleOptions: {
fillColor: '#003dce',
strokeColor: '#003dce',
strokeWeight: '1',
strokeOpacity: '0.5',
zindex: 1,
fillOpacity: '0.5',
editable: false,
draggable: false
},
polygonOptions: {
fillColor: '#003dce',
strokeColor: '#003dce',
strokeWeight: '1',
strokeOpacity: '0.5',
zindex: 1,
fillOpacity: '0.5',
editable: false,
draggable: false
},
polylineOptions: {
fillColor: '#003dce',
strokeColor: '#003dce',
strokeWeight: '1',
strokeOpacity: '0.5',
zindex: 1,
fillOpacity: '0.5',
editable: false,
draggable: false
},
rectangleOptions: {
fillColor: '#003dce',
strokeColor: '#003dce',
strokeWeight: '1',
strokeOpacity: '0.5',
zindex: 1,
fillOpacity: '0.5',
editable: false,
draggable: false
}
});
map_obj.drawingmanager.setMap(map_obj.map);
map_obj.event_listener(map_obj.drawingmanager, 'circlecomplete', function(circle) {
map_obj.wpgmp_circles.push(circle);
map_obj.wpgmp_shape_complete(circle, 'circle');
});
map_obj.event_listener(map_obj.drawingmanager, 'polygoncomplete', function(polygon) {
map_obj.wpgmp_polygons.push(polygon);
map_obj.wpgmp_shape_complete(polygon, 'polygon');
});
map_obj.event_listener(map_obj.drawingmanager, 'polylinecomplete', function(polyline) {
map_obj.wpgmp_polylines.push(polyline);
map_obj.wpgmp_shape_complete(polyline, 'polyline');
});
map_obj.event_listener(map_obj.drawingmanager, 'rectanglecomplete', function(rectangle) {
map_obj.wpgmp_rectangles.push(rectangle);
map_obj.wpgmp_shape_complete(rectangle, 'rectangle');
});
},
create_polygon: function() {
var map_obj = this;
$.each(this.map_data.shapes.shape.polygons, function(index, polygon) {
var path = [];
$.each(polygon.cordinates, function(ind, cordinate) {
var latlng = cordinate.split(',');
path.push(new google.maps.LatLng(latlng[0], latlng[1]));
});
polygon.reference = new google.maps.Polygon({
paths: path,
strokeColor: polygon.settings.stroke_color,
strokeOpacity: polygon.settings.stroke_opacity,
strokeWeight: polygon.settings.stroke_weight,
fillColor: polygon.settings.fill_color,
fillOpacity: polygon.settings.fill_opacity
});
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
map_obj.event_listener(polygon.reference, "click", function() {
map_obj.setSelection(polygon.reference);
map_obj.get_shapes_options(polygon.reference, 'polygon');
});
} else if (polygon.events.url !== '' || polygon.events.message !== '') {
map_obj.event_listener(polygon.reference, "click", function() {
if (polygon.events.url === '' && polygon.events.message !== '') {
var bounds = new google.maps.LatLngBounds();
polygon.reference.getPath().forEach(function(element, index) {
bounds.extend(element);
});
$.each(map_obj.places, function(key, place) {
place.infowindow.close();
});
map_obj.opened_info.setPosition(bounds.getCenter());
map_obj.opened_info.setContent(polygon.events.message);
map_obj.opened_info.open(map_obj.map, this);
} else {
window.location = polygon.events.url;
}
});
}
}
polygon.reference.setMap(map_obj.map);
map_obj.wpgmp_polygons.push(polygon.reference);
map_obj.wpgmp_shape_events.push({
'shape': polygon.reference,
'url': polygon.events.url,
'message': polygon.events.message
});
});
},
create_polyline: function() {
var map_obj = this;
$.each(this.map_data.shapes.shape.polylines, function(index, polyline) {
var path = [];
if (typeof polyline.cordinates != 'undefined') {
$.each(polyline.cordinates, function(ind, cordinate) {
var latlng = cordinate.split(',');
path.push(new google.maps.LatLng(latlng[0], latlng[1]));
});
polyline.reference = new google.maps.Polyline({
path: path,
strokeColor: polyline.settings.stroke_color,
strokeOpacity: polyline.settings.stroke_opacity,
strokeWeight: polyline.settings.stroke_weight
});
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
map_obj.event_listener(polyline.reference, "click", function() {
map_obj.setSelection(polyline.reference);
map_obj.get_shapes_options(polyline.reference, 'polyline');
});
} else if (polyline.events.url !== '' || polyline.events.message !== '') {
map_obj.event_listener(polyline.reference, "click", function() {
if (polyline.events.url === '' && polyline.events.message !== '') {
var bounds = new google.maps.LatLngBounds();
polyline.reference.getPath().forEach(function(element, index) {
bounds.extend(element);
});
$.each(map_obj.places, function(key, place) {
place.infowindow.close();
});
map_obj.opened_info.setPosition(bounds.getCenter());
map_obj.opened_info.setContent(polyline.events.message);
map_obj.opened_info.open(map_obj.map, this);
} else if (polyline.events.url !== '') {
window.location = polyline.events.url;
}
});
}
}
}
if (typeof polyline.reference != 'undefined') {
polyline.reference.setMap(map_obj.map);
map_obj.wpgmp_polylines.push(polyline.reference);
map_obj.wpgmp_shape_events.push({
'shape': polyline.reference,
'url': polyline.events.url,
'message': polyline.events.message
});
}
});
},
event_listener: function(obj, type, func) {
google.maps.event.addListener(obj, type, func);
},
create_circle: function() {
var map_obj = this;
$.each(this.map_data.shapes.shape.circles, function(index, circle) {
var path;
$.each(circle.cordinates, function(ind, cordinate) {
var latlng = cordinate.split(',');
path = new google.maps.LatLng(latlng[0], latlng[1]);
});
circle.reference = new google.maps.Circle({
fillColor: circle.settings.fill_color,
fillOpacity: circle.settings.fill_opacity,
strokeColor: circle.settings.stroke_color,
strokeOpacity: circle.settings.stroke_opacity,
strokeWeight: circle.settings.stroke_weight,
center: path,
radius: parseInt(circle.settings.radius)
});
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
map_obj.event_listener(circle.reference, "click", function() {
map_obj.setSelection(circle.reference);
map_obj.get_shapes_options(circle.reference, 'circle');
});
} else if (circle.events.url !== '' || circle.events.message !== '') {
map_obj.event_listener(circle.reference, "click", function() {
if (circle.events.url === '' && circle.events.message !== '') {
$.each(map_obj.places, function(key, place) {
place.infowindow.close();
});
map_obj.opened_info.setPosition(circle.reference.getCenter());
map_obj.opened_info.setContent(circle.events.message);
map_obj.opened_info.open(map_obj.map, this);
} else if (circle.events.url !== '') {
window.location = circle.events.url;
}
});
}
}
circle.reference.setMap(map_obj.map);
map_obj.wpgmp_circles.push(circle.reference);
map_obj.wpgmp_shape_events.push({
'shape': circle.reference,
'url': circle.events.url,
'message': circle.events.message
});
});
},
create_rectangle: function() {
var map_obj = this;
$.each(this.map_data.shapes.shape.rectangles, function(index, rectangle) {
var left_latlng = rectangle.cordinates[0].split(',');
var right_latlng = rectangle.cordinates[1].split(',');
var path = new google.maps.LatLngBounds(new google.maps.LatLng(left_latlng[0], left_latlng[1]), new google.maps.LatLng(right_latlng[0], right_latlng[1]));
rectangle.reference = new google.maps.Rectangle({
bounds: path,
fillColor: rectangle.settings.fill_color,
fillOpacity: rectangle.settings.fill_opacity,
strokeColor: rectangle.settings.stroke_color,
strokeOpacity: rectangle.settings.stroke_opacity,
strokeWeight: rectangle.settings.stroke_weight
});
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
map_obj.event_listener(rectangle.reference, "click", function() {
map_obj.setSelection(rectangle.reference);
map_obj.get_shapes_options(rectangle.reference, 'rectangle');
});
} else if (rectangle.events.url !== '' || rectangle.events.message !== '') {
map_obj.event_listener(rectangle.reference, "click", function() {
if (rectangle.events.url === '' && rectangle.events.message !== '') {
$.each(map_obj.places, function(key, place) {
place.infowindow.close();
});
map_obj.opened_info.setPosition(rectangle.reference.getBounds().getCenter());
map_obj.opened_info.setContent(rectangle.events.message);
map_obj.opened_info.open(map_obj.map, this);
} else if (rectangle.events.url !== '') {
window.location = rectangle.events.url;
}
});
}
}
rectangle.reference.setMap(map_obj.map);
map_obj.wpgmp_rectangles.push(rectangle.reference);
map_obj.wpgmp_shape_events.push({
'shape': rectangle.reference,
'url': rectangle.events.url,
'message': rectangle.events.message,
});
});
},
get_shapes_options: function(shape, type) {
$(".hiderow").show();
$("input[name='shape_fill_color']").val(shape.fillColor);
$("input[name='shape_fill_color']").parent().parent().find('.wp-color-result').css('background-color', shape.fillColor);
$("select[name='shape_fill_opacity']").val(shape.fillOpacity);
$("input[name='shape_stroke_color']").val(shape.strokeColor);
$("input[name='shape_stroke_color']").parent().parent().find('.wp-color-result').css('background-color', shape.strokeColor);
$("select[name='shape_stroke_opacity']").val(shape.strokeOpacity);
$("select[name='shape_stroke_weight']").val(shape.strokeWeight);
$("textarea[name='shape_path']").parent().hide();
$("input[name='shape_radius']").parent().hide();
$("input[name='shape_center']").parent().hide();
$("input[name='shape_northeast']").parent().hide();
$("input[name='shape_southwest']").parent().hide();
var all_shape_events = this.wpgmp_shape_events;
$.each(all_shape_events, function(i, shape_event) {
if (shape_event.shape == shape) {
$("input[name='shape_click_url']").val(shape_event.url);
$("textarea[name='shape_click_message']").val(shape_event.message);
}
});
if (type == 'circle') {
$("input[name='shape_radius']").parent().show();
$("input[name='shape_radius']").val(shape.getRadius());
$("input[name='shape_center']").parent().show();
$("input[name='shape_center']").val(shape.getCenter().lat() + ',' + shape.getCenter().lng());
} else if (type == 'rectangle') {
$("input[name='shape_northeast']").parent().show();
$("input[name='shape_northeast']").val(shape.getBounds().getNorthEast().lat() + ',' + shape.getBounds().getNorthEast().lng());
$("input[name='shape_southwest']").parent().show();
$("input[name='shape_southwest']").val(shape.getBounds().getSouthWest().lat() + ',' + shape.getBounds().getSouthWest().lng());
} else {
var polygon_cordinate = [];
var cordinates = shape.getPath();
cordinates.forEach(function(latlng, index) {
var latlngin = [latlng.lat(), latlng.lng()];
if (latlng.lat() !== "" && latlng.lng() !== "")
polygon_cordinate.push(latlngin);
});
$("textarea[name='shape_path']").parent().show();
$("textarea[name='shape_path']").val(polygon_cordinate.join(' '));
}
},
set_shapes_options: function(shape) {
var polyOptions2 = {
fillColor: $("input[name='shape_fill_color']").val(),
fillOpacity: $("select[name='shape_fill_opacity']").val(),
strokeColor: $("input[name='shape_stroke_color']").val(),
strokeOpacity: $("select[name='shape_stroke_opacity']").val(),
strokeWeight: $("select[name='shape_stroke_weight']").val(),
};
shape.setOptions(polyOptions2);
var all_shape_events = this.wpgmp_shape_events;
$.each(all_shape_events, function(i, shape_event) {
if (shape_event.shape == shape) {
shape_event.url = $("input[name='shape_click_url']").val();
shape_event.message = $("textarea[name='shape_click_message']").val();
}
});
},
wpgmp_save_shapes: function(allcordinate) {
$("input[name='shapes_values']").val(allcordinate.join("|"));
},
wpgmp_shape_complete: function(shape, type) {
var map_obj = this;
map_obj.setSelection(shape);
map_obj.drawingmanager.setDrawingMode(null);
if (typeof map_obj.map_data.shapes != 'undefined') {
if (map_obj.map_data.shapes.drawing_editable === true) {
map_obj.event_listener(shape, 'click', function() {
map_obj.setSelection(shape);
map_obj.get_shapes_options(shape, type);
});
map_obj.wpgmp_shape_events.push({
'shape': shape,
'url': '',
'message': ''
});
}
}
},
wpgmp_save_polylines: function() {
var all_polylines = [];
var map_obj = this;
var wpgmp_polylines = map_obj.wpgmp_polylines;
var all_shape_events = map_obj.wpgmp_shape_events;
for (var i = 0; i < wpgmp_polylines.length; i++) {
var polyline_cordinate = [];
var cordinates = wpgmp_polylines[i].getPath();
var settings = wpgmp_polylines[i].strokeWeight + "," + wpgmp_polylines[i].strokeOpacity + "," + wpgmp_polylines[i].strokeColor;
var events = "";
$.each(all_shape_events, function(j, shape_event) {
if (shape_event.shape == wpgmp_polylines[i]) {
events = shape_event.url + "***" + shape_event.message;
}
});
cordinates.forEach(function(latlng, index) {
var latlngin = [latlng.lat(), latlng.lng()];
polyline_cordinate.push(latlngin);
}
);
all_polylines.push(polyline_cordinate.join("----") + "..." + settings + "..." + events);
}
return all_polylines;
},
wpgmp_save_polygons: function() {
var all_polygons = [];
var map_obj = this;
var wpgmp_polygons = map_obj.wpgmp_polygons;
var all_shape_events = map_obj.wpgmp_shape_events;
for (var i = 0; i < wpgmp_polygons.length; i++) {
var polygon_cordinate = [];
var cordinates = wpgmp_polygons[i].getPath();
var settings = wpgmp_polygons[i].strokeWeight + "," + wpgmp_polygons[i].strokeOpacity + "," + wpgmp_polygons[i].strokeColor + "," + wpgmp_polygons[i].fillColor + "," + wpgmp_polygons[i].fillOpacity;
var events = "";
$.each(all_shape_events, function(j, shape_event) {
if (shape_event.shape == wpgmp_polygons[i]) {
events = shape_event.url + "***" + shape_event.message;
}
});
cordinates.forEach(function(latlng, index) {
var latlngin = [latlng.lat(), latlng.lng()];
if (latlng.lat() !== "" && latlng.lng() !== "")
polygon_cordinate.push(latlngin);
}
);
all_polygons.push(polygon_cordinate.join("----") + "..." + settings + "..." + events);
}
return all_polygons;
},
wpgmp_save_circles: function() {
var all_circles = [];
var map_obj = this;
var wpgmp_circles = map_obj.wpgmp_circles;
var all_shape_events = map_obj.wpgmp_shape_events;
for (var i = 0; i < wpgmp_circles.length; i++) {
var circle_cordinate = [];
var latlng = wpgmp_circles[i].getCenter();
var settings = wpgmp_circles[i].strokeWeight + "," + wpgmp_circles[i].strokeOpacity + "," + wpgmp_circles[i].strokeColor + "," + wpgmp_circles[i].fillColor + "," + wpgmp_circles[i].fillOpacity + "," + wpgmp_circles[i].getRadius();
var events = "";
$.each(all_shape_events, function(j, shape_event) {
if (shape_event.shape == wpgmp_circles[i]) {
events = shape_event.url + "***" + shape_event.message;
}
});
var latlngin = [latlng.lat(), latlng.lng()];
if (latlng.lat() !== "" && latlng.lng() !== "")
circle_cordinate.push(latlngin);
all_circles.push(circle_cordinate.join("----") + "..." + settings + "..." + events);
}
return all_circles;
},
wpgmp_save_rectangles: function() {
var all_rectangles = [];
var map_obj = this;
var wpgmp_rectangles = map_obj.wpgmp_rectangles;
var all_shape_events = map_obj.wpgmp_shape_events;
for (var i = 0; i < wpgmp_rectangles.length; i++) {
var rectangle_cordinate = [];
var settings = wpgmp_rectangles[i].strokeWeight + "," + wpgmp_rectangles[i].strokeOpacity + "," + wpgmp_rectangles[i].strokeColor + "," + wpgmp_rectangles[i].fillColor + "," + wpgmp_rectangles[i].fillOpacity;
var events = "";
$.each(all_shape_events, function(j, shape_event) {
if (shape_event.shape == wpgmp_rectangles[i]) {
events = shape_event.url + "***" + shape_event.message;
}
});
var latlng = wpgmp_rectangles[i].getBounds().getSouthWest();
var latlngin = [latlng.lat(), latlng.lng()];
if (latlng.lat() !== "" && latlng.lng() !== "")
rectangle_cordinate.push(latlngin);
latlng = wpgmp_rectangles[i].getBounds().getNorthEast();
var latlngin = [latlng.lat(), latlng.lng()];
if (latlng.lat() !== "" && latlng.lng() !== "")
rectangle_cordinate.push(latlngin);
all_rectangles.push(rectangle_cordinate.join("----") + "..." + settings + "..." + events);
}
return all_rectangles;
},
set_kml_layer: function() {
var map_obj = this.map;
$.each(this.map_data.kml_layer.kml_layers_links, function(index, link) {
var kmlLayerOptions = {
url: link,
map: map_obj,
preserveViewport: true
};
new google.maps.KmlLayer(kmlLayerOptions);
});
},
set_fusion_layer: function() {
var fusionlayer = new google.maps.FusionTablesLayer({
query: {
select: this.map_data.fusion_layer.fusion_table_select,
from: this.map_data.fusion_layer.fusion_table_from
},
heatmap: {
enabled: this.map_data.fusion_layer.fusion_heat_map
},
styles: [{
markerOptions: {
iconName: this.map_data.fusion_layer.fusion_icon_name
},
polygonOptions: {
fillColor: '#00FF00',
fillOpacity: 0.3
}
}]
});
fusionlayer.setMap(this.map);
},
set_marker_cluster: function() {
var map_obj = this;
var markers = [];
var clusterStyles = [{
textColor: 'black',
url: map_obj.map_data.marker_cluster.icon,
height: 32,
width: 33
}];
$.each(this.places, function(index, place) {
if (place.marker.visible == true) {
markers.push(place.marker);
}
});
if (map_obj.map_data.marker_cluster.apply_style === true) {
if (!map_obj.markerClusterer) {
map_obj.markerClusterer = new MarkerClusterer(map_obj.map, {}, {
gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
styles: clusterStyles
});
}
map_obj.markerClusterer.clearMarkers();
map_obj.markerClusterer.addMarkers(markers);
google.maps.event.addListener(map_obj.markerClusterer, 'mouseover', function(c) {
c.clusterIcon_.div_.firstChild.src = map_obj.map_data.marker_cluster.hover_icon
});
google.maps.event.addListener(map_obj.markerClusterer, 'mouseout', function(c) {
c.clusterIcon_.div_.firstChild.src = map_obj.map_data.marker_cluster.icon
});
} else {
if (!map_obj.markerClusterer) {
map_obj.markerClusterer = new MarkerClusterer(map_obj.map, {}, {
gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
imagePath: map_obj.map_data.marker_cluster.image_path,
});
}
map_obj.markerClusterer.clearMarkers();
map_obj.markerClusterer.addMarkers(markers);
}
},
set_panning_control: function() {
var panning_data = this.map_data.panning_control;
var panning_map_obj = this.map;
var map_obj = this;
var strictBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(panning_data.from_latitude, panning_data.from_longitude),
new google.maps.LatLng(panning_data.to_latitude, panning_data.to_longitude)
);
google.maps.event.addListener(panning_map_obj, "dragend", function() {
if (strictBounds.contains(panning_map_obj.getCenter())) return;
var c = panning_map_obj.getCenter(),
x = c.lng(),
y = c.lat(),
maxX = strictBounds.getNorthEast().lng(),
maxY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
minY = strictBounds.getSouthWest().lat();
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
panning_map_obj.setCenter(new google.maps.LatLng(y, x));
});
google.maps.event.addListener(panning_map_obj, "zoom_changed", function() {
if (panning_map_obj.getZoom() < panning_data.zoom_level) {
panning_map_obj.setZoom(parseInt(map_obj.settings.zoom));
}
});
},
set_visual_refresh: function() {
google.maps.visualRefresh = true;
},
set_45_imagery: function() {
//this.map.setTilt(45);
},
set_overlay: function() {
this.map.overlayMapTypes.insertAt(0, new overlay_generator(new google.maps.Size(this.map_data.overlay_setting.width, this.map_data.overlay_setting.height), this.map_data.overlay_setting));
},
set_bicyle_layer: function() {
var bikeLayer = new google.maps.BicyclingLayer();
bikeLayer.setMap(this.map);
},
set_traffic_layer: function() {
var traffic_layer = new google.maps.TrafficLayer();
traffic_layer.setMap(this.map);
},
set_panoramic_layer: function() {
var panoramic_layer = new google.maps.panoramio.PanoramioLayer();
panoramic_layer.setMap(this.map);
},
set_transit_layer: function() {
var transit_layer = new google.maps.TransitLayer();
transit_layer.setMap(this.map);
},
set_weather_layer: function() {
var weatherLayer = new google.maps.weather.WeatherLayer({
windSpeedUnit: eval('google.maps.weather.WindSpeedUnit.' + this.map_data.weather_layer.wind_unit),
temperatureUnits: eval('google.maps.weather.TemperatureUnit.' + this.map_data.weather_layer.temperature_unit)
});
weatherLayer.setMap(this.map);
var cloudLayer = new google.maps.weather.CloudLayer();
cloudLayer.setMap(this.map);
},
set_streetview: function(latlng) {
var panoOptions = {
position: latlng,
addressControlOptions: {
position: google.maps.ControlPosition.BOTTOM_CENTER
},
linksControl: this.map_data.street_view.links_control,
panControl: this.map_data.street_view.street_view_pan_control,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL
},
enableCloseButton: this.map_data.street_view.street_view_close_button
};
if (this.map_data.street_view.pov_heading && this.map_data.street_view.pov_pitch) {
panoOptions['pov'] = {
heading: parseInt(this.map_data.street_view.pov_heading),
pitch: parseInt(this.map_data.street_view.pov_pitch)
};
}
var panorama = new google.maps.StreetViewPanorama(this.element, panoOptions);
},
map_loaded: function() {
var map_obj = this;
var gmap = map_obj.map;
google.maps.event.addListenerOnce(gmap, 'idle', function() {
var center = gmap.getCenter();
google.maps.event.trigger(gmap, 'resize');
gmap.setCenter(center);
});
if (map_obj.settings.center_by_nearest === true) {
map_obj.center_by_nearest();
}
if (map_obj.settings.close_infowindow_on_map_click === true) {
google.maps.event.addListener(gmap, "click", function(event) {
$.each(map_obj.places, function(key, place) {
place.infowindow.close();
place.marker.setAnimation(null);
});
});
}
},
resize_map: function() {
var map_obj = this;
var gmap = map_obj.map;
var zoom = gmap.getZoom();
var center = gmap.getCenter();
google.maps.event.trigger(this.map, 'resize');
gmap.setZoom(zoom);
gmap.setCenter(center);
},
responsive_map: function() {
var map_obj = this;
var gmap = map_obj.map;
google.maps.event.addDomListener(window, "resize", function() {
var zoom = gmap.getZoom();
var center = gmap.getCenter();
google.maps.event.trigger(gmap, "resize");
gmap.setZoom(zoom);
gmap.setCenter(center);
gmap.getBounds();
});
},
create_markers: function() {
var map_obj = this;
var places = map_obj.map_data.places;
var temp_listing_placeholder;
var replaceData;
var remove_keys = [];
$.each(places, function(key, place) {
if (place.location.lat && place.location.lng) {
if (typeof place.categories == 'undefined') {
place.categories = {};
}
place.marker = new google.maps.Marker({
position: new google.maps.LatLng(
parseFloat(place.location.lat),
parseFloat(place.location.lng)
),
icon: place.location.icon,
url: place.url,
draggable: place.location.draggable,
map: map_obj.map,
clickable: place.location.infowindow_disable,
});
if (map_obj.settings.infowindow_drop_animation === true) {
place.marker.setAnimation(google.maps.Animation.DROP);
}
if (map_obj.settings.infowindow_filter_only === true) {
place.marker.visible = false;
place.marker.setVisible(false);
}
// bind event to marker
if (map_obj.map_data.page == 'edit_location')
map_obj.marker_bind(place.marker);
var location_categories = [];
if (typeof place.categories != 'undefined') {
for (var cat in place.categories) {
location_categories.push(place.categories[cat].name);
}
}
var content = '';
if (map_obj.settings.infowindow_setting && place.source != 'post') {
replaceData = {
"{marker_id}": place.id,
"{marker_title}": place.title,
"{marker_address}": place.address,
"{marker_latitude}": place.location.lat,
"{marker_longitude}": place.location.lng,
"{marker_city}": place.location.city,
"{marker_state}": place.location.state,
"{marker_country}": place.location.country,
"{marker_postal_code}": place.location.postal_code,
"{marker_zoom}": place.location.zoom,
"{marker_icon}": place.location.icon,
"{marker_category}": location_categories.join(','),
"{marker_message}": place.content
};
//Add extenstion fields of locations
if (typeof place.location.extension_fields != 'undefined') {
for (var extra in place.location.extension_fields) {
if (!place.location.extension_fields[extra]) {
replaceData['{' + extra + '}'] = '';
} else {
replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
}
}
}
//Add extra fields of locations
if (typeof place.location.extra_fields != 'undefined') {
for (var extra in place.location.extra_fields) {
if (!place.location.extra_fields[extra]) {
replaceData['{' + extra + '}'] = '';
} else {
replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
}
}
}
var temp_listing_placeholder = map_obj.settings.infowindow_setting.replace(/{[^{}]+}/g, function(match) {
if (match in replaceData) {
return (replaceData[match]);
} else {
return ("");
}
});
content = temp_listing_placeholder;
} else if (place.source == 'post') {
content = place.infowindow_content;
}
if (content === "") {
content = '' + place.content + '
';
}
place.infowindow = new google.maps.InfoWindow({
content: content
});
if (place.location.infowindow_default_open === true) {
map_obj.openInfoWindow(place);
} else if (map_obj.settings.default_infowindow_open === true) {
map_obj.openInfoWindow(place);
}
var on_event = map_obj.settings.infowindow_open_event;
var bounce_on_event = map_obj.settings.infowindow_bounce_animation;
map_obj.event_listener(place.marker, on_event, function() {
$.each(map_obj.places, function(key, prev_place) {
prev_place.infowindow.close();
prev_place.marker.setAnimation(null);
});
map_obj.openInfoWindow(place);
if (bounce_on_event == 'click') {
map_obj.toggle_bounce(place.marker);
}
});
if (bounce_on_event == 'mouseover' && on_event != 'mouseover') {
map_obj.event_listener(place.marker, 'mouseover', function() {
place.marker.setAnimation(google.maps.Animation.BOUNCE);
});
map_obj.event_listener(place.marker, 'mouseout', function() {
place.marker.setAnimation(null);
});
}
if (bounce_on_event != '') {
google.maps.event.addListener(place.infowindow, 'closeclick', function() {
place.marker.setAnimation(null);
});
}
map_obj.places.push(place);
} else {
remove_keys.push(key);
}
});
$.each(remove_keys, function(index, value) {
places.splice(value, 1);
});
},
toggle_bounce: function(marker) {
if (marker.getAnimation() !== null) {
marker.setAnimation(null);
} else {
marker.setAnimation(google.maps.Animation.BOUNCE);
}
},
display_markers: function() {
var map_obj = this;
map_obj.show_places = [];
map_obj.categories = [];
var categories = {};
for (var i = 0; i < map_obj.places.length; i++) {
map_obj.places[i].marker.setMap(map_obj.map);
if (map_obj.places[i].marker.visible === true) {
map_obj.show_places.push(this.places[i]);
}
if (typeof map_obj.places[i].categories != 'undefined') {
$.each(map_obj.places[i].categories, function(index, category) {
if (typeof categories[category.name] == 'undefined') {
categories[category.name] = category;
}
});
}
}
this.categories = categories;
},
show_center_circle: function() {
var map_obj = this;
map_obj.set_center_circle = new google.maps.Circle({
map: map_obj.map,
center: map_obj.map.getCenter(),
fillColor: map_obj.settings.center_circle_fillcolor,
fillOpacity: map_obj.settings.center_circle_fillopacity,
strokeColor: map_obj.settings.center_circle_strokecolor,
strokeOpacity: map_obj.settings.center_circle_strokeopacity,
strokeWeight: map_obj.settings.center_circle_strokeweight,
radius: 5 * 1000
});
},
show_center_marker: function() {
var map_obj = this;
var clickable = false;
if (map_obj.settings.center_marker_infowindow != '') {
clickable = true;
}
map_obj.map_center_marker = new google.maps.Marker({
position: map_obj.map.getCenter(),
title: map_obj.settings.center_marker_infowindow,
map: map_obj.map,
icon: map_obj.settings.center_marker_icon,
clickable: clickable
});
if (typeof map_obj.map_center_info == 'undefined') {
map_obj.map_center_info = new google.maps.InfoWindow();
}
if (map_obj.settings.center_marker_infowindow != '') {
google.maps.event.addListener(map_obj.map_center_marker, 'click', function() {
map_obj.map_center_info.setPosition(map_obj.map.getCenter());
map_obj.map_center_info.setContent(map_obj.settings.center_marker_infowindow);
map_obj.map_center_info.open(map_obj.map, this);
});
}
},
center_by_nearest: function() {
var map_obj = this;
this.get_current_location(function(user_position) {
if (!map_obj.user_location_marker) {
map_obj.user_location_marker = new google.maps.Marker({
position: user_position,
title: wpgmp_local.center_location_message,
map: map_obj.map,
icon: map_obj.settings.marker_default_icon
});
}
map_obj.user_location_marker.setVisible(true);
map_obj.map.setCenter(user_position);
if (map_obj.settings.show_center_circle === true) {
map_obj.show_center_circle();
}
});
},
get_current_location: function(success_func, error_func) {
var map = this;
if (typeof map.user_location == 'undefined') {
navigator.geolocation.getCurrentPosition(function(position) {
map.user_location = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
if (success_func)
success_func(map.user_location);
}, function(ErrorPosition) {
if (error_func)
error_func(ErrorPosition);
}, {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
});
} else {
if (success_func)
success_func(map.user_location);
}
},
openInfoWindow: function(place) {
var map_obj = this;
if (place.location.onclick_action == "custom_link") {
if (place.location.open_new_tab == 'yes')
window.open(place.location.redirect_custom_link, '_blank');
else
window.open(place.location.redirect_custom_link, '_self');
} else {
place.infowindow.open(this.map, place.marker);
if (typeof map_obj.settings.infowindow_click_change_center != 'undefined' && map_obj.settings.infowindow_click_change_center == true) {
map_obj.map.setCenter(place.marker.getPosition());
}
if (typeof map_obj.settings.infowindow_click_change_zoom != 'undefined' && map_obj.settings.infowindow_click_change_zoom > 0) {
map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
}
if (this.map_data.map_tabs && this.map_data.map_tabs.direction_tab && this.map_data.map_tabs.direction_tab.dir_tab === true) {
$(this.element).find('.start_point').val(place.address);
}
}
},
};
$.fn.maps = function(options, places) {
this.each(function() {
if (!$.data(this, "wpgmp_maps")) {
$.data(this, "wpgmp_maps", new GoogleMaps(this, options, places));
}
});
// chain jQuery functions
return this;
};
}(jQuery, window, document));